﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SQLite;
using System.Data;

namespace iPhoneTrackerWin.Parser
{
    class CSVParser
    {
        /// <summary>
        /// Liefert alle Punkte des Users im CSV Format "Lat,Lon,Value,Time"
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public String getAllPoints(Data.User user)
        {
            var q = from point in Data.GPXDataManager.DefaultContext.GPS
                    where point.UserID == user.ID
                    select point;

            double Precision = 100;
            var sb = new StringBuilder("lat,lon,value,time\\n");
            foreach (Data.GPS p in q)
            {
                //Berechne Lat und Long nach Präzision
                var latitude_index = Math.Floor(p.Lat * Precision) / Precision;
                var longitude_index = Math.Floor(p.Lon * Precision) / Precision;

                sb.Append(p.Lat.ToString().Replace(",", ".") + "," + p.Lon.ToString().Replace(",", ".") + ",1," + p.Timestamp.Value.ToString("yyyy-MM-dd") + "\\n");
            }
            return sb.ToString();
        }

        //public String parse(path)
        //{
        //    CSVDataAdapter d;

        //    try
        //    {
        //        //Nutze die angegebene Datei als "Datenbank"
        //        using (var con = new SQLiteConnection(@"Data Source=" + path + ";Version=3;"))
        //        using (var cmd = con.CreateCommand())
        //        {
        //            //this.Log("Opening DB connection");

        //            //Öffne Verbindung
        //            con.Open();

        //            if (con.State == ConnectionState.Open)
        //            {
        //                //this.Log("Connection opened.");
        //            }
        //            else
        //            {
        //                //this.Log("Connection couldn't be opened!");
        //            }

        //            //Baue SQL Query auf
        //            var query = CellLocationQuery + WhereQuery;

        //            //if (this.LoadWiFi)
        //            //{
        //            //    query += " UNION " + WiFiLocationQuery + WhereQuery;
        //            //}

        //            query += " ORDER BY Timestamp";

        //            cmd.CommandText = query;

        //            this.Log("Executing query");

        //            //ziehe die gewünschten Daten aus der CSV heraus
        //            using (var reader = cmd.ExecuteReader())
        //            {
        //                this.Log("Query executed successfully.");

        //                //Iteriere über alle gefundenen Daten
        //                while (reader.Read())
        //                {
        //                    //Lese Zeit und Ort ein
        //                    var timestamp = this.GetSafeDouble(reader, 0);
        //                    var latitude = this.GetSafeDouble(reader, 1);
        //                    var longitude = this.GetSafeDouble(reader, 2);

        //                    if (timestamp == 0d || (latitude == 0d && longitude == 0d))
        //                    {
        //                        continue;
        //                    }

        //                    //Datum von Unix / Mac konvertieren 
        //                    //bei uns nötig?
        //                    var date = this.ConvertFromUnixTimestamp(ToUnixOffset + timestamp);

        //                    var timeBucketString = date.ToString("yyyy-MM-dd");

        //                    //Berechne Lat und Long nach Präzision
        //                    var latitude_index = Math.Floor(latitude * Precision) / Precision;
        //                    var longitude_index = Math.Floor(longitude * Precision) / Precision;

        //                    var allKey = string.Format(this.englishCultureInfo, "{0},{1},All Time", latitude_index, longitude_index);
        //                    var timeKey = string.Format(this.englishCultureInfo, "{0},{1},{2}", latitude_index, longitude_index, timeBucketString);

        //                    //Speicher das in "Bucket" / Wörterbuch
        //                    //Es gibt 2 Arten: Zeitunabhängig (mit "AllTime" hinten dran) und Zeitabhängig mit dem spezifischen timestamp
        //                    this.IncrementBuckets(buckets, allKey);
        //                    this.IncrementBuckets(buckets, timeKey);
        //                }
        //            }
        //        }
        //    }
        //    catch (Exception e)
        //    {
        //        this.Log(e);
        //    }
        //}
    }
}
